#pragma once


#include <boost/cast.hpp>


#include <boost/mpl/assert.hpp>


#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>

/**
	multi index headers
*/
//@{
#ifdef _DEBUG
#define BOOST_MULTI_INDEX_SAFE_MODE_ASSERT
#endif
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/sequenced_index.hpp>
#include <boost/multi_index/key_extractors.hpp> 

#define boost_MI_container ::boost::multi_index::multi_index_container
#define boost_MI_indexed_by ::boost::multi_index::indexed_by
#define boost_MI_ordered_unique ::boost::multi_index::ordered_unique
#define boost_MI_ordered_non_unique ::boost::multi_index::ordered_non_unique
#define boost_MI_sequenced ::boost::multi_index::sequenced
#define boost_MI_tag ::boost::multi_index::tag
#define boost_MI_member ::boost::multi_index::member
#define boost_MI_identity ::boost::multi_index::identity
#define boost_MI_const_mem_fun ::boost::multi_index::const_mem_fun
#define boost_MI_mem_fun ::boost::multi_index::mem_fun


#define foDeclareBoost_MITag(x) struct x{}


//@}